<?php

namespace App\Services;

use App\Models\Comment;
use App\Models\Post;
use App\Models\User;
use App\Exceptions\BusinessException;

/**
 * 评论服务类
 * 
 * 职责：
 * - 处理评论相关的业务逻辑
 * - 评论创建、删除的业务规则
 * - 评论层级关系管理
 */
class CommentService extends BaseService
{
    /**
     * 创建评论
     * 
     * @param Post $post 文章模型
     * @param array $data 评论数据
     * @param User $user 评论用户
     * @return Comment
     */
    public function create(Post $post, array $data, User $user): Comment
    {
        $comment = $post->comments()->create([
            'content' => $data['content'],
            'user_id' => $user->id,
            'parent_id' => $data['parent_id'] ?? null
        ]);

        return $comment;
    }

    /**
     * 删除评论
     * 
     * @param Comment $comment 评论模型
     * @param User $user 执行删除的用户
     * @return bool
     * @throws BusinessException
     */
    public function delete(Comment $comment, User $user): bool
    {
        // 检查权限：只有评论作者或文章作者可以删除
        if ($comment->user_id !== $user->id && $comment->post->author_id !== $user->id) {
            $this->throwException('无权删除此评论', 403);
        }

        // 删除评论及其回复
        return $comment->delete();
    }

    /**
     * 获取文章的所有评论（按层级组织）
     * 
     * @param Post $post 文章模型
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public function getCommentsForPost(Post $post)
    {
        return $post->comments()
            ->whereNull('parent_id')
            ->with(['user', 'replies.user'])
            ->orderBy('created_at', 'desc')
            ->get();
    }
}

